package com.interview.javabasic.DataStructrue;/*
@李子宁
Happy,happy everyday!
冲鸭！
*/

import com.interview.javabasic.thread.ThreadPoolDemo;

public class SingleLinkedListDemo {
    public static void main(String[] args) {
        HeroNode heroNode = new HeroNode(1, "松江", "及时雨");
        HeroNode heroNode1 = new HeroNode(2, "卢俊义", "玉麒麟");
        SingleLinkedList singleLinkedList = new SingleLinkedList();
        singleLinkedList.add(heroNode);
        singleLinkedList.add(heroNode1);
        singleLinkedList.list();
    }

}


//定义SingleLinkedList管理英雄
class SingleLinkedList{
    private HeroNode head = new HeroNode(0,"","");

    public HeroNode getHead(){
        return head;
    }

    //添加节点
    public void add(HeroNode heroNode){
        //因为head节点不能动，所以我们需要一个辅助指针tmp
        HeroNode tmp = head;
        //遍历链表，找到最后
        while (true){
            //找到最后的节点
            if (tmp.next==null){
                break;
            }
            //如果没有找到最后的节点，就后移
            tmp = tmp.next;
        }
        //当退出while时，tmp就指向了链表的最后
        tmp.next = heroNode;
    }

    //第二中添加英雄
    public void addByOrder(HeroNode heroNode){
        //单链表，所以tmp扎到的是要加入位置的前一个节点
        HeroNode tmp = head;
        boolean flag = false;//标志添加的编号是否存在，
        while (true){
            if (tmp.next==null){//已经遍历到链表最后
                break;
            }
            if (tmp.next.no>heroNode.no){
                //位置找到，就在tmp的后面插入
                break;
            }else if (tmp.next.no==heroNode.no){
                //编号已存在
                flag = true;
                break;
            }
            tmp = tmp.next; //后移就是在遍历
        }
        //判断flag的值
        if (flag){
            //不能添加，编号存在
            System.out.printf("准备插入的英雄的编号%d已经存在，不能加入",heroNode.no);

        }else{
            //将新的节点添加进来。
            heroNode.next = tmp.next;
            tmp.next = heroNode;
        }
    }

    //删除节点  遍历要找到前一个及诶单
    public void delete(int no){
        HeroNode tmp = head;
        boolean flag = false;//是否找到待删除节点的前一个节点
        while(true){
            if (tmp.next == null){
                break;
            }
            if (tmp.next.no == no){
                flag = true;
                break;
            }
            tmp = tmp.next;
        }
        if (flag){
            tmp.next = tmp.next.next;
        }else{
            System.out.println("不存在这样的节点值%d");
        }
    }

    //显示链表
    public void list(){
        //判断链表为空
        if (head.next==null){
            return;
        }
        //因为头结点不能动
        HeroNode tmp = head.next;
        while (true){
            //判断是否遍历结束
            if (tmp==null){
                break;
            }
            System.out.println(tmp);
            //将tmp后移
            tmp = tmp.next;//不后移会是个死循环
        }
    }
}


//定义一个HreoNode
class HeroNode{
    public int no;
    public String name;
    public String nickname;
    public HeroNode next;

    public HeroNode(int hno,String hname,String nickName){
        this.no = hno;
        this.name = hname;
        this.nickname = nickName;
    }



    @Override
    public String toString() {
        return "HeroNode{" +
                "no=" + no +
                ", name='" + name + '\'' +
                ", nickname='" + nickname + '\''+
                '}';
    }
}
